package config

import "github.com/spf13/viper"

// 配置文件结构体
type Config struct {
	Server   ServerConfig
	Database DatabaseConfig
	JWT      JWTConfig
	Log      LogConfig
}

// 启动配置结构体
type ServerConfig struct {
	Port string
}

// 数据库配置结构体
type DatabaseConfig struct {
	Host     string
	Port     string
	User     string
	Password string
	Name     string
}

// JWT配置结构体
type JWTConfig struct {
	Secret  string
	Expires int `mapstructure:"expires"`
	Issuer  string
}

// 日志配置结构体
type LogConfig struct {
	Env      string
	Path     string
	Level    string
	Rotation LogRotation
}

type LogRotation struct {
	MaxSize    int
	MaxAge     int
	MaxBackups int
	Compress   bool
}

func LoadConfig() (*Config, error) {
	viper.AddConfigPath("./config")
	viper.SetConfigName("config")
	viper.SetConfigType("yaml")

	if err := viper.ReadInConfig(); err != nil {
		return nil, err
	}

	var config Config
	if err := viper.Unmarshal(&config); err != nil {
		return nil, err
	}

	return &config, nil
}
